def improved_sieve(limit):
    """改进的筛法实现"""
    if limit < 2:
        return []

    sieve = bytearray(b'\x01') * ((limit + 1) // 2)
    sieve[0] = 0  # 1不是素数

    # 只处理奇数
    for i in range(1, int(limit ** 0.5) // 2 + 1):
        if sieve[i]:
            start = 2 * i * (i + 1)
            step = 2 * i + 1
            sieve[start::step] = bytearray([0]) * ((limit - start) // step + 1)

    primes = [2] if limit >= 2 else []
    primes.extend(2 * i + 1 for i in range(1, len(sieve)) if sieve[i])
    return primes